﻿//using RuoVea.ExApp;
//using RuoVea.ExEnum;
//using SqlSugar;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Linq.Expressions;
//using System.Text;
//using System.Threading.Tasks;

//namespace RuoVea.ExSugar.Tenant;

///// <summary>
///// 
///// </summary>
///// <typeparam name="T"></typeparam>
//public partial class TenantSugarRepository<T> : SimpleClient<T> where T : class, new()
//{
//    /// <summary>
//    /// 分页查询
//    /// </summary>
//    /// <param name="where">条件</param>
//    /// <param name="pageNo">当前页</param>
//    /// <param name="pageSize">每页条数</param>
//    /// <param name="order">排序</param>
//    /// <param name="orderEnum">枚举，1=desc 2=asc</param>
//    /// <returns>集合、总条数、总页数</returns>
//    public async Task<(List<T>, int total, int totalPage)> GetPageResultAsync(Expression<Func<T, bool>> where, int pageNo, int pageSize, Expression<Func<T, object>> order, SordEnum orderEnum = SordEnum.Desc)
//    {
//        RefAsync<int> total = 0;
//        var list = await Context.Queryable<T>()
//            .Where(where)
//            .OrderBy(order, (int)orderEnum == 1 ? OrderByType.Desc : OrderByType.Asc)
//            .ToPageListAsync(pageNo, pageSize, total);
//        var totalPage = total != 0 ? (total % pageNo) == 0 ? (total / pageSize) : (total / pageSize) + 1 : 0;
//        return (list, total, totalPage);
//    }

//    /// <summary>
//    /// 分页查询
//    /// </summary>
//    /// <param name="where">Expression 条件</param>
//    /// <param name="strWhere">string 条件</param>
//    /// <param name="pageNo">当前页</param>
//    /// <param name="pageSize">每页条数</param>
//    /// <param name="order">排序</param>
//    /// <param name="orderEnum">枚举，1=desc 2=asc</param>
//    /// <returns>集合、总条数、总页数</returns>
//    public async Task<(List<T>, int total, int totalPage)> GetPageResultAsync(Expression<Func<T, bool>> where, string strWhere, int pageNo, int pageSize, Expression<Func<T, object>> order, SordEnum orderEnum = SordEnum.Desc)
//    {
//        RefAsync<int> total = 0;
//        var list = await Context.Queryable<T>()
//            .Where(where)
//            .WhereIF(!string.IsNullOrEmpty(strWhere), strWhere)
//            .OrderBy(order, (int)orderEnum == 1 ? OrderByType.Desc : OrderByType.Asc)
//            .ToPageListAsync(pageNo, pageSize, total);
//        var totalPage = total != 0 ? (total % pageNo) == 0 ? (total / pageSize) : (total / pageSize) + 1 : 0;
//        return (list, total, totalPage);
//    }

//    /// <summary>
//    /// 根据条件，获得最新的一条数据
//    /// </summary>
//    /// <param name="where">拉姆达条件</param>
//    /// <param name="order">拉姆达排序</param>
//    /// <param name="orderEnum">枚举，1=desc 2=asc</param>
//    /// <returns></returns>
//    public async Task<T> GetFirstAsync(Expression<Func<T, bool>> where, Expression<Func<T, object>> order, SordEnum orderEnum = SordEnum.Desc)
//    {
//        return await Context.Queryable<T>()
//            .Where(where)
//            .OrderBy(order, (int)orderEnum == 1 ? OrderByType.Desc : OrderByType.Asc)
//            .FirstAsync() ?? new T();
//    }

//    /// <summary>
//    /// 根据条件查询列表
//    /// </summary>
//    /// <param name="where">拉姆达条件</param>
//    /// <param name="order">拉姆达排序</param>
//    /// <param name="orderEnum">枚举，1=desc 2=asc</param>
//    /// <returns></returns>
//    public async Task<List<T>> GetListAsync(Expression<Func<T, bool>> where, Expression<Func<T, object>> order, SordEnum orderEnum = SordEnum.Desc)
//    {
//        var query = Context.Queryable<T>()
//            .Where(where)
//            .OrderBy(order, (int)orderEnum == 1 ? OrderByType.Desc : OrderByType.Asc);
//        return await query.ToListAsync();
//    }

//    /// <summary>
//    /// 根据条件查询列表
//    /// </summary>
//    /// <param name="where">拉姆达条件</param>
//    /// <param name="order">order by id desc</param>
//    /// <returns></returns>
//    public async Task<List<T>> GetListAsync(Expression<Func<T, bool>> where, string order)
//    {
//        var query = Context.Queryable<T>()
//            .Where(where)
//            .OrderByIF(!string.IsNullOrEmpty(order), order);
//        return await query.ToListAsync();
//    }

//    /// <summary>
//    /// 根据条件查询列表
//    /// </summary>
//    /// <param name="where">拉姆达条件</param>
//    /// <param name="expression">拉姆达排序</param>
//    /// <returns></returns>
//    public async Task<int> SumAsync(Expression<Func<T, bool>> where, Expression<Func<T, int>> expression)
//    {
//        var query = Context.Queryable<T>()
//            .Where(where);
//        return await query.SumAsync(expression);
//    }

//    /// <summary>
//    /// 
//    /// </summary>
//    /// <param name="insertObj"></param>
//    /// <param name="ignoreNullValues"></param>
//    /// <returns></returns>
//    public bool Insert(T insertObj, bool ignoreNullValues = true)
//    {
//        return Context.Insertable(insertObj).IgnoreColumns(ignoreNullValues).ExecuteCommand() > 0;
//    }

//    /// <summary>
//    /// 
//    /// </summary>
//    /// <param name="insertObj"></param>
//    /// <param name="ignoreNullValues"></param>
//    /// <returns></returns>
//    public async Task<bool> InsertAsync(T insertObj, bool ignoreNullValues = true)
//    {
//        return await Context.Insertable(insertObj).IgnoreColumns(ignoreNullValues).ExecuteCommandAsync() > 0;
//    }
//    /// <summary>
//    /// 
//    /// </summary>
//    /// <param name="insertObjs"></param>
//    /// <param name="ignoreNullValues"></param>
//    /// <returns></returns>
//    public async Task<bool> InsertAsync(List<T> insertObjs, bool ignoreNullValues = true)
//    {
//        return await Context.Insertable(insertObjs).IgnoreColumns(ignoreNullValues).ExecuteCommandAsync() > 0;
//    }

//    /// <summary>
//    /// 
//    /// </summary>
//    /// <param name="updataObj"></param>
//    /// <param name="ignoreNullValues"></param>
//    /// <returns></returns>
//    public bool Update(T updataObj, bool ignoreNullValues = true)
//    {
//        return Context.Updateable(updataObj).IgnoreColumns(ignoreNullValues).ExecuteCommand() > 0;
//    }

//    /// <summary>
//    /// 
//    /// </summary>
//    /// <param name="updataObj"></param>
//    /// <param name="ignoreNullValues"></param>
//    /// <returns></returns>
//    public async Task<bool> UpdateAsync(T updataObj, bool ignoreNullValues = true)
//    {
//        return await Context.Updateable(updataObj).IgnoreColumns(ignoreNullValues).ExecuteCommandAsync() > 0;
//    }
//}
